package org.dei.perla.utils.dataconverter.annotations;

import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;

/**
 * Annotazione per la memorizzazione dei dati relativi ad un campo composto.
 * I tipi validi sono le classi che presentano l'annotazione StructInfo
 * @author Guido Rota
 */
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.FIELD)
public @interface CompositeField { 
	
	/**
	 * Dimensione in byte del campo composto.
	 * Puo' essere omesso, ma questo rende il campo incompatibile per l'utilizzo
	 * con l'annotazione @FixedLengthArray, in quanto non e' possibile creare un array di
	 * dimensione fissa se gli elementi che lo compongono non lo sono.
	 * 
	 * Questo campo potrebbe essere omesso, in quanto la dimensione di una struttura puo'
	 * essere calcolata a runtime controllando le altre annotazioni, ma questa procedura 
	 * introdurrebbe diversi overhead durante la trasformazione in array di byte e viceversa.
	 */
	int size() default -1;
}
